import router from "@/router";
import { useRouter as Router, useRoute as Route } from "vue-router";

// 是否在微前端环境中
export const isMicroAppEnv = window.__MICRO_APP_ENVIRONMENT__;

// 获取主应用的路由示例
export const baseRouter = window.microApp?.router?.getBaseAppRouter();

// 订阅主应用中分发过来的路由跳转
export function subscribeRouterChange() {
	if (!isMicroAppEnv) return;
	window.microApp.addDataListener((data: any) => {
		// 当主应用下发跳转指令时进行跳转
		if (data.type === "router-change" && data.path) {
			router.replace(data.path);
		}
	});
}

// 订阅主应用中的全局信息数据
export function subscribeGlobalData() {
	if (!isMicroAppEnv) return;
	return window.microApp.getGlobalData();
}

// 向主应用分发路由-控制主应用的路由跳转
export function dispatchRouterChange(path: string, query: any) {
	if (!isMicroAppEnv) return;
	// 控制主应用跳转
	baseRouter.push({ path, query });
}

// 判断是否在微前端环境中使用Router实例，在组件中只需要调整引入useRouter包的方式即可使用 router 上的所有属性和方法，可以替代 dispatchRouterChange 方法使用
export function useRouter(): any {
	if (isMicroAppEnv) return baseRouter;
	return Router();
}

// 判断是否在微前端环境中使用Route实例，在组件中只需要调整引入useRouter包的方式即可使用 route 上的所有属性和方法，可以替代 baseRouter 属性使用
export function useRoute(): any {
	if (isMicroAppEnv) return baseRouter.currentRoute.value;
	return Route();
}
